﻿using System.Collections.Generic;

namespace ClassDataExport
{
    /// <summary>
    /// Extensionmethods für Listen und Export von Daten
    /// </summary>
    public static class ClassDataExportExtensions
    {
        /// <summary>
        /// Gibt zur aktuellen Liste einen CSV String zurück
        /// </summary>
        /// <param name="itemList">Die aktuelle Liste von der aus die Funktion aufgerufen wird</param>
        /// <returns>CSV String zur aktuellen Liste</returns>
        public static string GetCSV<T>(this List<T> itemList)
        {
            return GetCSV(itemList, new SortedList<int, OutputProperties>());
        }

        /// <summary>
        /// Gibt zur aktuellen Liste und den übergebenen outputproperties die passende CSV Liste zurück
        /// </summary>
        /// <param name="itemList">Die aktuelle Liste von der aus die Funktion aufgerufen wird</param>
        /// <param name="outputPropertieses">Liste der Outputproperties</param>
        /// <returns>CSV String zur aktuellen Liste</returns>
        public static string GetCSV<T>(this List<T> itemList, SortedList<int, OutputProperties> outputPropertieses)
        {
            ClassDataExport<T> classDataExport = new ClassDataExport<T>(itemList, outputPropertieses);
            return classDataExport.GetDataOutput().GetCSV();
        }

        /// <summary>
        /// Erstellen einer Excel Datei aus der aktuellen Liste.
        /// </summary>
        /// <param name="itemList">Die aktuelle Liste von der aus die Funktion aufgerufen wird</param>
        /// <param name="filePath">Der Dateipfad inkl. Dateiname, wo die Datei abgelegt werden soll.</param>
        /// <returns>TRUE-> Erstellen war erfolgreich | FALSE->Fehler beim Erstellen</returns>
        public static bool CreateExcelFile<T>(this List<T> itemList, string filePath)
        {
            return CreateExcelFile(itemList, new SortedList<int, OutputProperties>(), filePath);
        }

        /// <summary>
        /// Erstellen einer Excel Datei aus der aktuellen Liste.
        /// </summary>
        /// <param name="itemList">Die aktuelle Liste von der aus die Funktion aufgerufen wird</param>
        /// <param name="outputPropertieses">Liste mit Outputproperties, die die Reihenfolge der Properties bestimmt</param>
        /// <param name="filePath">Der Dateipfad inkl. Dateiname, wo die Datei abgelegt werden soll.</param>
        /// <returns>TRUE-> Erstellen war erfolgreich | FALSE->Fehler beim Erstellen</returns>
        public static bool CreateExcelFile<T>(this List<T> itemList, SortedList<int , OutputProperties> outputPropertieses, string filePath)
        {
           ClassDataExport<T> classDataExport = new ClassDataExport<T>(itemList, outputPropertieses);
           return classDataExport.GetDataOutput().CreateExcelFile(filePath);
        }
    }
}
